/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package posartenobsa;

import CodigoBarras.CreadorCodigo;
import SQL.Insertar;
import com.sun.data.provider.impl.CachedRowSetDataProvider;
import com.sun.rave.web.ui.appbase.AbstractPageBean;
import com.sun.sql.rowset.CachedRowSetXImpl;
import com.sun.webui.jsf.component.Alert;
import com.sun.webui.jsf.component.Button;
import com.sun.webui.jsf.component.DropDown;
import com.sun.webui.jsf.component.TextField;
import com.sun.webui.jsf.model.SingleSelectOptionsList;
import java.sql.*;
import javax.faces.FacesException;
import javax.faces.component.html.HtmlInputText;
import javax.faces.convert.IntegerConverter;
import javax.faces.event.ValueChangeEvent;

/**
 * <p>Page bean that corresponds to a similarly named JSP page.  This
 * class contains component definitions (and initialization code) for
 * all components that you have defined on this page, as well as
 * lifecycle methods and event handlers where you may add behavior
 * to respond to incoming events.</p>
 *
 * @version A_Deposito.java
 * @version Created on 20/03/2012, 08:43:23 PM
 * @author Fabio
 */
public class A_Deposito extends AbstractPageBean {
    // <editor-fold defaultstate="collapsed" desc="Managed Component Definition">

    /**
     * <p>Automatically managed component initialization.  <strong>WARNING:</strong>
     * This method is automatically generated, so any user-specified code inserted
     * here is subject to being replaced.</p>
     */
    String cc = "jdbc:postgresql://localhost:5432/WEBARTENOBSA?user=postgres&password=pokemon";
    Insertar in = new Insertar();
    String ProductoDepo, depositante, SQL, DETALLE;
    int cantidadDepo;
    double precio;
    CreadorCodigo CCOD = new CreadorCodigo();

    private void _init() throws Exception {
        productoDataProvider.setCachedRowSet((javax.sql.rowset.CachedRowSet) getValue("#{A_Deposito.productoRowSet}"));
        productoRowSet.setDataSourceName("java:comp/env/jdbc/public_PostgreSQL");
        productoRowSet.setCommand("SELECT * FROM producto where producto_activo = TRUE");
        productoRowSet.setTableName("producto");
        productoDataProvider1.setCachedRowSet((javax.sql.rowset.CachedRowSet) getValue("#{A_Deposito.productoRowSet}"));
        sociodepositanteDataProvider.setCachedRowSet((javax.sql.rowset.CachedRowSet) getValue("#{A_Deposito.sociodepositanteRowSet}"));
        sociodepositanteRowSet.setDataSourceName("java:comp/env/jdbc/public_PostgreSQL");
        sociodepositanteRowSet.setCommand("SELECT * FROM socio where socio_activo = TRUE");
        sociodepositanteRowSet.setTableName("socio");
    }
    private CachedRowSetDataProvider productoDataProvider = new CachedRowSetDataProvider();

    public CachedRowSetDataProvider getProductoDataProvider() {
        return productoDataProvider;
    }

    public void setProductoDataProvider(CachedRowSetDataProvider crsdp) {
        this.productoDataProvider = crsdp;
    }
    private CachedRowSetXImpl productoRowSet = new CachedRowSetXImpl();

    public CachedRowSetXImpl getProductoRowSet() {
        return productoRowSet;
    }

    public void setProductoRowSet(CachedRowSetXImpl crsxi) {
        this.productoRowSet = crsxi;
    }
    private IntegerConverter dropDown1Converter = new IntegerConverter();

    public IntegerConverter getDropDown1Converter() {
        return dropDown1Converter;
    }

    public void setDropDown1Converter(IntegerConverter ic) {
        this.dropDown1Converter = ic;
    }
    private CachedRowSetDataProvider productoDataProvider1 = new CachedRowSetDataProvider();

    public CachedRowSetDataProvider getProductoDataProvider1() {
        return productoDataProvider1;
    }

    public void setProductoDataProvider1(CachedRowSetDataProvider crsdp) {
        this.productoDataProvider1 = crsdp;
    }
    private CachedRowSetDataProvider sociodepositanteDataProvider = new CachedRowSetDataProvider();

    public CachedRowSetDataProvider getSociodepositanteDataProvider() {
        return sociodepositanteDataProvider;
    }

    public void setSociodepositanteDataProvider(CachedRowSetDataProvider crsdp) {
        this.sociodepositanteDataProvider = crsdp;
    }
    private CachedRowSetXImpl sociodepositanteRowSet = new CachedRowSetXImpl();

    public CachedRowSetXImpl getSociodepositanteRowSet() {
        return sociodepositanteRowSet;
    }

    public void setSociodepositanteRowSet(CachedRowSetXImpl crsxi) {
        this.sociodepositanteRowSet = crsxi;
    }
    private IntegerConverter CB_SelProducto_mConverter = new IntegerConverter();

    public IntegerConverter getCB_SelProducto_mConverter() {
        return CB_SelProducto_mConverter;
    }

    public void setCB_SelProducto_mConverter(IntegerConverter ic) {
        this.CB_SelProducto_mConverter = ic;
    }
    private IntegerConverter dropDown4Converter = new IntegerConverter();

    public IntegerConverter getDropDown4Converter() {
        return dropDown4Converter;
    }

    public void setDropDown4Converter(IntegerConverter ic) {
        this.dropDown4Converter = ic;
    }
    private SingleSelectOptionsList CB_SelDeposito_m1DefaultOptions = new SingleSelectOptionsList();

    public SingleSelectOptionsList getCB_SelDeposito_m1DefaultOptions() {
        return CB_SelDeposito_m1DefaultOptions;
    }

    public void setCB_SelDeposito_m1DefaultOptions(SingleSelectOptionsList ssol) {
        this.CB_SelDeposito_m1DefaultOptions = ssol;
    }
    private HtmlInputText TF_precioproducto = new HtmlInputText();

    public HtmlInputText getTF_precioproducto() {
        return TF_precioproducto;
    }

    public void setTF_precioproducto(HtmlInputText hit) {
        this.TF_precioproducto = hit;
    }
    private IntegerConverter CB_depositanteConverter = new IntegerConverter();

    public IntegerConverter getCB_depositanteConverter() {
        return CB_depositanteConverter;
    }

    public void setCB_depositanteConverter(IntegerConverter ic) {
        this.CB_depositanteConverter = ic;
    }
    private DropDown CB_SProductoDE2 = new DropDown();

    public DropDown getCB_SProductoDE2() {
        return CB_SProductoDE2;
    }

    public void setCB_SProductoDE2(DropDown dd) {
        this.CB_SProductoDE2 = dd;
    }
    private TextField TF_CantidadPro1 = new TextField();

    public TextField getTF_CantidadPro1() {
        return TF_CantidadPro1;
    }

    public void setTF_CantidadPro1(TextField tf) {
        this.TF_CantidadPro1 = tf;
    }
    private TextField TF_PrecioPro1 = new TextField();

    public TextField getTF_PrecioPro1() {
        return TF_PrecioPro1;
    }

    public void setTF_PrecioPro1(TextField tf) {
        this.TF_PrecioPro1 = tf;
    }
    private DropDown CB_depositante = new DropDown();

    public DropDown getCB_depositante() {
        return CB_depositante;
    }

    public void setCB_depositante(DropDown dd) {
        this.CB_depositante = dd;
    }
    private Alert alertaDepositoguardado = new Alert();

    public Alert getAlertaDepositoguardado() {
        return alertaDepositoguardado;
    }

    public void setAlertaDepositoguardado(Alert a) {
        this.alertaDepositoguardado = a;
    }
    private IntegerConverter CB_SProductoDE1Converter = new IntegerConverter();

    public IntegerConverter getCB_SProductoDE1Converter() {
        return CB_SProductoDE1Converter;
    }

    public void setCB_SProductoDE1Converter(IntegerConverter ic) {
        this.CB_SProductoDE1Converter = ic;
    }
    private IntegerConverter CB_SProductoDE3Converter = new IntegerConverter();

    public IntegerConverter getCB_SProductoDE3Converter() {
        return CB_SProductoDE3Converter;
    }

    public void setCB_SProductoDE3Converter(IntegerConverter ic) {
        this.CB_SProductoDE3Converter = ic;
    }

    // </editor-fold>
    /**
     * <p>Construct a new Page bean instance.</p>
     */
    public A_Deposito() {
    }

    /**
     * <p>Callback method that is called whenever a page is navigated to,
     * either directly via a URL, or indirectly via page navigation.
     * Customize this method to acquire resources that will be needed
     * for event handlers and lifecycle methods, whether or not this
     * page is performing post back processing.</p>
     * 
     * <p>Note that, if the current request is a postback, the property
     * values of the components do <strong>not</strong> represent any
     * values submitted with this request.  Instead, they represent the
     * property values that were saved for this view when it was rendered.</p>
     */
    @Override
    public void init() {
        // Perform initializations inherited from our superclass
        super.init();
        // Perform application initialization that must complete
        // *before* managed components are initialized
        // TODO - add your own initialiation code here

        // <editor-fold defaultstate="collapsed" desc="Managed Component Initialization">
        // Initialize automatically managed components
        // *Note* - this logic should NOT be modified
        try {
            _init();
        } catch (Exception e) {
            log("A_Deposito Initialization Failure", e);
            throw e instanceof FacesException ? (FacesException) e : new FacesException(e);
        }

        // </editor-fold>
        // Perform application initialization that must complete
        // *after* managed components are initialized
        // TODO - add your own initialization code here
    }

    /**
     * <p>Callback method that is called after the component tree has been
     * restored, but before any event processing takes place.  This method
     * will <strong>only</strong> be called on a postback request that
     * is processing a form submit.  Customize this method to allocate
     * resources that will be required in your event handlers.</p>
     */
    @Override
    public void preprocess() {
    }

    /**
     * <p>Callback method that is called just before rendering takes place.
     * This method will <strong>only</strong> be called for the page that
     * will actually be rendered (and not, for example, on a page that
     * handled a postback and then navigated to a different page).  Customize
     * this method to allocate resources that will be required for rendering
     * this page.</p>
     */
    @Override
    public void prerender() {
    }

    /**
     * <p>Callback method that is called after rendering is completed for
     * this request, if <code>init()</code> was called (regardless of whether
     * or not this was the page that was actually rendered).  Customize this
     * method to release resources acquired in the <code>init()</code>,
     * <code>preprocess()</code>, or <code>prerender()</code> methods (or
     * acquired during execution of an event handler).</p>
     */
    @Override
    public void destroy() {
        productoDataProvider.close();
        productoDataProvider1.close();
        sociodepositanteDataProvider.close();
    }

    /**
     * <p>Return a reference to the scoped data bean.</p>
     *
     * @return reference to the scoped data bean
     */
    protected ApplicationBean1 getApplicationBean1() {
        return (ApplicationBean1) getBean("ApplicationBean1");
    }

    /**
     * <p>Return a reference to the scoped data bean.</p>
     *
     * @return reference to the scoped data bean
     */
    protected RequestBean1 getRequestBean1() {
        return (RequestBean1) getBean("RequestBean1");
    }

    /**
     * <p>Return a reference to the scoped data bean.</p>
     *
     * @return reference to the scoped data bean
     */
    protected SessionBean1 getSessionBean1() {
        return (SessionBean1) getBean("SessionBean1");
    }

    public String HPL_AUsuario1_action() {
        // TODO: Process the action. Return value is a navigation
        // case name where null will return to the same page.
        return "case1";
    }

    public String HPL_ASocio_action() {
        // TODO: Process the action. Return value is a navigation
        // case name where null will return to the same page.
        return "case2";
    }

    public String hyperlink2_action() {
        // TODO: Process the action. Return value is a navigation
        // case name where null will return to the same page.
        return "case3";
    }

    public String HPL_ADeposito_action() {
        // TODO: Process the action. Return value is a navigation
        // case name where null will return to the same page.
        return null;
    }

    public String HPL_AExposicion1_action() {
        // TODO: Process the action. Return value is a navigation
        // case name where null will return to the same page.
        return "case4";
    }

    public String HPL_Vender_action() {
        // TODO: Process the action. Return value is a navigation
        // case name where null will return to the same page.
        return "case5";
    }

    public String tabCUsuario_action() {
        // TODO: Process the action. Return value is a navigation
        // case name where null will return to the same page.
        return null;
    }

    public String b_Guardarusuario_action() {
        // TODO: Process the action. Return value is a navigation
        // case name where null will return to the same page.
        return null;
    }

    public String tabMSocio_action() {
        // TODO: Process the action. Return value is a navigation
        // case name where null will return to the same page.
        return null;
    }

    public String tabDSocio_action() {
        // TODO: Process the action. Return value is a navigation
        // case name where null will return to the same page.
        return null;
    }

    public String b_CrearDeposito_action() {

        depositante = String.valueOf(CB_depositante.getValue());
        ProductoDepo = String.valueOf(CB_SProductoDE2.getValue());
        cantidadDepo = Integer.valueOf((String) TF_CantidadPro1.getText());
        precio = Double.valueOf((String) TF_PrecioPro1.getText());


        SQL = ("INSERT INTO deposito (producto_idproducto,socio_cedula, usuario_username, fecha_deposito, deposito_activo, cantidad)"
                + "values (" + ProductoDepo + "," + depositante + ",'fabiogu',now(),TRUE," + cantidadDepo + ");");
        in.insertar(SQL);

        try {
            Class.forName("org.postgresql.Driver");
            Connection conexion = DriverManager.getConnection(cc);
            Statement comando = conexion.createStatement();
            String sql = "SELECT cantidad, nombre_producto FROM producto WHERE idproducto = " + ProductoDepo + ";";
            ResultSet resultado = comando.executeQuery(sql);

            while (resultado.next()) {
                int numero = resultado.getInt("cantidad");
                String nombre = resultado.getString("nombre_producto");
                CCOD.CrearCodigo(ProductoDepo, nombre);
                System.out.println("El numero leido fue: " + numero);
                cantidadDepo = (cantidadDepo + numero);
                SQL = ("UPDATE producto SET cantidad =" + cantidadDepo + " WHERE idproducto = " + ProductoDepo + "");
                in.insertar(SQL);
            }
            resultado.close();
            comando.close();
            conexion.close();
        } catch (Exception ev) {
            System.out.println(ev.getMessage());
        }
        alertaDepositoguardado.setVisible(true);
        return null;
    }

    public String b_Modificardeposito_action() {

        return null;
    }

    public void TF_CantidadPro3_processValueChange(ValueChangeEvent event) {
    }

    public void CB_SProductoDE2_processValueChange(ValueChangeEvent event) {
        




    }
}
